package org.jsola.contract.service;

import org.jsola.contract.dao.IContractCredentialDAO;
import org.jsola.contract.dto.ContractCredentialAddDTO;
import org.jsola.contract.dto.ContractCredentialUpdateDTO;
import org.jsola.contract.entity.ContractCredentialDO;
import org.jsola.contract.query.ContractCredentialQuery;
import org.jsola.contract.vo.ContractCredentialListVO;
import org.jsola.contract.vo.ContractCredentialVO;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 电子合同账号凭证
 *
 * @author JanusMix
 */
public interface IContractCredentialService extends IService<IContractCredentialDAO, ContractCredentialDO> {

    /**
     * 新增电子合同账号凭证
     * @param contractCredentialAddDTO 新增电子合同账号凭证DTO
     * @param tokenUser 当前用户
     * @return 电子合同账号凭证详情信息
     */
    ContractCredentialVO save(ContractCredentialAddDTO contractCredentialAddDTO, TokenUser tokenUser);

    /**
     * 修改电子合同账号凭证
     * @param contractCredentialUpdateDTO 修改电子合同账号凭证DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(ContractCredentialUpdateDTO contractCredentialUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除电子合同账号凭证，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param contractCredentialIds 电子合同账号凭证id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...contractCredentialIds);

    /**
     * 根据电子合同账号凭证id查找
     * @param contractCredentialId 电子合同账号凭证id
     * @param siteId 所属站点id
     * @return 电子合同账号凭证详情信息
     */
    ContractCredentialVO selectById(String contractCredentialId, String siteId);

    /**
     * 查询电子合同账号凭证
     * @param contractCredentialQuery 查询条件
     * @param siteId 所属站点id
     * @return 电子合同账号凭证列表信息
     */
    List<ContractCredentialListVO> select(ContractCredentialQuery contractCredentialQuery, String siteId);

    /**
    * 查询电子合同账号凭证记录数
    * @param contractCredentialQuery 查询条件
    * @param siteId 所属站点id
    * @return 电子合同账号凭证记录数
    */
    int selectCount(ContractCredentialQuery contractCredentialQuery, String siteId);

    /**
     * 分页查询电子合同账号凭证
     * @param contractCredentialQuery 查询条件
     * @param siteId 所属站点id
     * @return 电子合同账号凭证列表信息
     */
    Page<ContractCredentialListVO> selectPage(ContractCredentialQuery contractCredentialQuery, String siteId);


    /**
     * 根据电子合同账号凭证id查找
     * @param contractCredentialId 电子合同账号凭证id
     * @param siteId 所属站点id
     * @return 电子合同账号凭证
     */
    ContractCredentialDO selectDOById(String contractCredentialId, String siteId);

    /**
     * 查询电子合同账号凭证
     * @param contractCredentialQuery 查询条件
     * @param siteId 所属站点id
     * @return 电子合同账号凭证列表
     */
    List<ContractCredentialDO> selectDO(ContractCredentialQuery contractCredentialQuery, String siteId);

    /**
     * 获取所有租户的可用的e签宝的合同配置
     *
     * @return 合同账号列表
     */
    List<ContractCredentialDO> selectAll();

    /**
     * 获取当前租户的凭证
     *
     * @param tokenUser 当前登录用户
     * @return 凭证对象
     */
    ContractCredentialVO selectBySiteId(TokenUser tokenUser);
}


